package cn.jh.smartos

import android.app.Application
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.widget.Toast
import cn.jh.smartos.cockroach.Cockroach
import kotlin.properties.Delegates

/**
 * Created by pjh on 18/3/12.
 */
class App :Application() {

    companion object {

        private val TAG = "jh.App"

        var context: Context by Delegates.notNull()
            private set


    }
    override fun onCreate() {

        super.onCreate()
        context = applicationContext

        Cockroach.install(object : Cockroach.ExceptionHandler {
            override fun handlerException(thread: Thread?, throwable: Throwable?) {
                //开发时使用Cockroach可能不容易发现bug，所以建议开发阶段在handlerException中用Toast谈个提示框，
                //由于handlerException可能运行在非ui线程中，Toast又需要在主线程，所以new了一个new Handler(Looper.getMainLooper())，
                //所以千万不要在下面的run方法中执行耗时操作，因为run已经运行在了ui线程中。
                //new Handler(Looper.getMainLooper())只是为了能弹出个toast，并无其他用途
                if (thread == null || throwable == null) {
                    Handler(Looper.getMainLooper()).post {
                        try {
                            //建议使用下面方式在控制台打印异常，这样就可以在Error级别看到红色log
                            Log.e("app", "--->CockroachException:$thread<---", throwable)
                            Toast.makeText(this@App, "Exception Happend\n" + thread + "\n" + throwable.toString(), Toast.LENGTH_SHORT).show()
                            //                        throw new RuntimeException("..."+(i++));
                        } catch (e: Throwable) {

                        }
                    }
                } else {
                    Log.e("app", "未知的异常，Android系统bug")
                }


            }

        })


    }
}